﻿#pragma once

#include "topo_base.h"

namespace CAGD
{

/**
 * 拓扑 shell.
 */
class TopoShell : public TopoBase
{
  public:
    /**
     * @brief 基本空构造.
     * @see
     */
    TopoShell();

    /**
     * @brief 析构.
     * @see
     */
    ~TopoShell();

    /**
     * @brief 所属 lump.
     * @return
     * @see
     */
    TopoLump *&Lump();

    /**
     * @brief 所有 face.
     * @return
     * @see
     */
    std::vector<TopoFace *> &Faces();

    /**
     * @brief 所有 wire.
     * @return
     * @see
     */
    std::vector<TopoWire *> &Wires();

    /**
     * @brief 拓扑类型.
     * @return
     * @see
     */
    TopoType Type() const override;

  protected:
    TopoLump *m_lump;                // 所属 lump
    std::vector<TopoFace *> m_faces; // 所有 face
    std::vector<TopoWire *> m_wires; // 所有 wire
};

} // namespace CAGD
